home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Windows Expert
/
Windows Expert.iso
/
desktop
/
profft.zip
/
SOURCE
/
RUBBER.CPP
< prev
Wrap
C/C++ Source or Header
|
1992-04-26
|
5KB
|
139 lines
/****************************************************************************
RUBBER.CPP inneholder disse variable og funksjonene i denne rekkef°lgen.
*****************************************************************************
void TComplexWindow::DrawFreehand(RTMessage Msg)
void TComplexWindow::WMRButtonDown(RTMessage)
void TComplexWindow::WMLButtonDown(RTMessage Msg)
void TComplexWindow::WMMouseMove(RTMessage Msg)
void TComplexWindow::WMLButtonUp(RTMessage)
****************************************************************************/
#include <owl.h>
#include <math.h>
#include <edit.h>
#include <scrollba.h>
#pragma hdrstop
#include "profftid.h" // Symbolske konstanter
#include "profft.h" // Klassedefinisjoner
void TComplexWindow::DrawFreehand(RTMessage Msg)
/****************************************************************************
Denne blir kallt nσr brukeren trykker pσ venstre musknapp eller holder
denne inne. Den tegner med r°dt slik at brukeren kan markere de omrσder han
°nsker σ fjerne f°r han gjennomf°rer selve frihσndsfilteret.
RTMessage Msg Inneholder koordinatene til musen.
Kodet av: SA
Modifisert: MK 16.04.92 Bygget om for ikke σ tegne rett i det komplekse
bildet, men indikere de valgte omrσder med r°dt.
Tillater nσ ogsσ σ holde knappen inne og tegne.
Denne ble flyttet fra TComplexWindow::
WMLButtonDown og lagt i egen funksjon for σ
supportere knapp nede frihσndstegning.
MK 24.04.92 Support for to typer viskerlµr (sirkel + firkant)
****************************************************************************/
{
int iX1, iX2, iY1, iY2, iRubberDiv2, iRubberSize;
// Hvis brukeren befinner seg i bildeomrσdet i vinduets klientomrσde
if ((Msg.LP.Lo<=bmpInfo->bmiHeader.biWidth-1) &&
(Msg.LP.Hi<=bmpInfo->bmiHeader.biHeight-1))
{
iRubberSize = ((TMainWindow *)Parent)->GetRubberSize();
iRubberDiv2 = iRubberSize/2;
// Regner ut "boksen" som viskelµret skal dekke
if (iRubberSize>1)
{
iX1 = Msg.LP.Lo-iRubberDiv2;
iY1 = Msg.LP.Hi-iRubberDiv2;
iX2 = Msg.LP.Lo+iRubberDiv2;
iY2 = Msg.LP.Hi+iRubberDiv2;
if (iX1 < 0) iX1 = 0;
if (iY1 < 0) iY1 = 0;
}
else
{
iX1 = Msg.LP.Lo; iY1 = Msg.LP.Lo;
iX2 = iX1+1; iY2 = iY1+1;
}
if (bCircleRubber) // Hvis sirkelboks
Ellipse(DragDC, iX1, iY1, iX2, iY2); // tegn sirkel
else
Rectangle(DragDC, iX1, iY1, iX2, iY2);// eller tegn firkant.
}
}
void TComplexWindow::WMRButtonDown(RTMessage)
/****************************************************************************
Denne blir kallt nσr brukeren trykker h°yre musknapp i et komplekst
bilde. Denne gir beskjed til TComplexWindow objektet om at det mσ
vise seg pσ nytt, og fjerner dermed de r°de omrσdene i bildet (angre).
Kodet av: MK
****************************************************************************/
{
InvalidateRect(HWindow, NULL, TRUE);
}
void TComplexWindow::WMLButtonDown(RTMessage Msg)
/****************************************************************************
Denne blir kallt nσr brukeren trykker pσ venstre musknapp.
Den tegner med r°dt slik at brukeren kan markere de omrσder han
°nsker σ fjerne f°r han gjennomf°rer selve frihσndsfilteret.
RTMessage Msg Inneholder koordinatene til musen. Sendes bare videre.
Kodet av: SA
Modifisert: MK 16.04.92 Support for σ tegne f°rst med r°dt.
****************************************************************************/
{
if (!bButtonDown) // Hvis knappen ikke allerede er nede
{
bButtonDown = TRUE;
SetCapture(HWindow);
DragDC = GetDC(HWindow);
SelectObject(DragDC, hpenRed); // Velg pen og fyllefarge
SelectObject(DragDC, hbrRed); // for frihσndstegning.
DrawFreehand(Msg);
}
}
void TComplexWindow::WMMouseMove(RTMessage Msg)
/****************************************************************************
Denne kalles hvis brukeren holder venstre museknapp nede, dvs. holder
pσ σ tegne i det komplekse bildet.
RTMessage Msg Inneholder koordinatene til musen som bare sendes videre.
Kodet av: SA
Modifisert: MK 16.04.92 Skillte ut selve tegningen i egen modul
for σ supportere "hold knappen inne" tegning.
****************************************************************************/
{
if (bButtonDown)
DrawFreehand(Msg);
}
void TComplexWindow::WMLButtonUp(RTMessage)
/****************************************************************************
Kalles nσr brukeren slipper knappen (dvs. er ferdig med σ tegne). Den
setter kun noen systemparametre og "husker" at brukeren er ferdig med σ
tegne.
Kodet av: SA
Modifisert: MK 16.04.92 Vedlikehold/bugfix.
****************************************************************************/
{
if (bButtonDown)
{
bButtonDown = FALSE;
ReleaseCapture();
ReleaseDC(HWindow, DragDC);
}
}